#include "stdio.h"
#include "string.h"//该库函数放的都是字符串相关的函数
#define _CRT_SECURE_NO_WARNINGS 1
int main()
{
	//strlen用于求字符串的长度，且求的是/0之前的字符个数
	int len1 = strlen("abcdef");
	printf("%d\n", len1);
	


	//小题目
	int len2 = strlen("c:\test\129\test.c");
	printf("%d\n", len2);//结果为14，两个/t和/12也都是转义字符，也属于字符，不可忽略




	/*语句
	1.空语句：仅有一个分号，一般用于这里需要一个语句，但是这个语句不需要做任何事，那就可以写一个空语句
	2.表达式语句：就是在表达式后面加上分号
	int main()
	{
	    int a=20;
	    int b=10;
	    b=a+b;            表达式语句
	}
	3.函数调用语句：函数调用的时候，也会加上分号，就是函数调用语句
	printf("hehe");    函数调用语句，调用printf函数
	4.复合语句：其实就是代码块，成对括号中的代码就是一个代码块，也被称为复合语句
	*/

    /*控制语句(c语言支持三种结构：顺序结构，选择结构，循环结构）*****************
	1.条件判断也叫分支语句：if语句，switch语句
	2.循环执行语句：do while语句，while语句，for语句
	3.转向语句：break语句，goto语句，continue语句，return语句*/
	
	

	//c语言数据类型和变量


	//布尔类型：布尔类型变量的取值是true和false
#include "stdbool.h"//使用布尔类型需要引用该头文件
	_Bool flag = true;
	if (flag)
		printf("I LIKE C\n"); 
	
	bool flag2 = true;
	if (flag2)
		printf("I HATE C\n");//可以用_Bool也可以bool
	
	
	
	//各种类型的长度
	//sizeof计算结果是	size_t  类型的 
	//size_t类型的值，打印的时候用%zd 

	printf("%zd\n", sizeof(char));
	printf("%zd\n", sizeof(_Bool));
	printf("%zd\n", sizeof(short));
	printf("%zd\n", sizeof(int));
	printf("%zd\n", sizeof(long));
	printf("%zd\n", sizeof(long long));
	printf("%zd\n", sizeof(float));
	printf("%zd\n", sizeof(double));
	printf("%zd\n", sizeof(long double));//以上结果全部都是以字节为单位
	//long的长度可能是4也可能是8，其设定是比int长度长就行
	//long double的长度可能是8也肯能是16，其设定是比double长度长就行

	printf("\n");


	int num=100;
	printf("%zd\n", sizeof(int));
	printf("%zd\n", sizeof(num));
	printf("%zd\n", sizeof num);

	printf("\n");

	short s = 10;
	int num2 = 100;
	printf("%zd\n", sizeof(s = num + 2));//sizeof求出的结果是size_t类型的，而想打印该类型的值需要用%zd	
	printf("%d\n", s);//这里s的值还是为10，说明sizeof后面跟的表达式不参与计算  
	


	//signed和unsigned：用于修饰字符型和整型的，signed表示一个类型带有正负号，包含负值，unsigned表示该类型不带有正负号，
	// 只能表示0和正整数，对于int类型，是默认带有正负号的，其等同于signed int
	signed int num3;//num3可以是正，负，0
	unsigned int age;//age只能是0或正数

	signed char ch1 = 'x';//字符类型的负数指的是其ASCII码值
	unsigned char ch2;
	//其次signed long，signed short,signed long long long等也可以
	signed int num4 = -100;//对于int类型的数据打印应该用%d 
	printf("num4=%d\n", num4);

	unsigned int num5 = 100;//对于unsigned int 数据打印要用%u
	num5 = -100;
	printf("num5=%u\n", num5);	

	printf("\n");


	int n = 10;
	printf("n=%d\n", n);//结果是n=10，原因是当局部变量和全局变量相同时，局部变量优先
	
	printf("\n");

	printf("除法运算符\n");
	printf("%d\n", 6 / 4);//结果为1，因为除号的两端如果都是整数，执行的是整数除法
	printf("%f\n", 6 / 4.0);
	printf("%lf\n", 6.0 / 4.0);//除号两端如果出现了浮点数，才执行的是浮点数除法，两个运算数至少出现一个

	printf("\n");
	printf("求模操作符：该运算符只能用于两个整数\n");
	printf("%d\n", 6 % 4);

	printf("\n");
	printf("负数求模规则，结果的正负号由第一个运算数的正负号决定\n");
	printf("%d\n",11%5);
	printf("%d\n",11%-5);
	printf("%d\n", -11 % 5);


	printf("\n");
	printf("复合赋值符\n");
	int a = 10;
	a += 5;;//该语句即a=a+5 
	printf("a=%d\n", a); 
	int b = 10;
	b -= 2;//该语句即b=b-2
	printf("b=%d\n", b);
	printf("复合赋值符还有：+=，-=，*=，/=，%=");
	printf("\n");

	printf("单目操作符：--，++\n");
	printf("后置++\n");
	int a1 = 10;
	int b1 = a1++;//后置++：先使用，后+1，先把a1的值赋给b1，然后a1再+1
	printf("a1=%d\n", a1);//11
	printf("b1=%d\n", b1);//10	

	printf("前置++\n");
	int a2 = 10;
	int b2 = ++a2;//前置++：先+1，后使用
	printf("a2=%d\n", a2);//11
	printf("b2=%d\n", b2);//11


	int a3 = 10;
	printf("%d\n", a3--);//这里依旧先使用，后--
	printf("%d\n", a3);//上一步使用完之后，a3-1
	

	

	
	return 0;
}
int n = 100;